使用分割器
本教程将指导您使用 OV20i 的 AI 分割功能创建完整的分割检测。您将学习如何通过逐像素教导相机识别和测量特定特征,如铅笔痕迹、划痕或其他缺陷,从而实现检测和分析。
您将学到:
- 如何从头到尾设置分割配方
- 如何训练 AI 模型识别特定特征
- 如何根据分割结果配置通过/失败逻辑
- 如何优化分割性能以适应生产使用
实际应用示例: 本教程以铅笔痕迹检测为例,但相同原理适用于检测划痕、裂纹、污染或任何其他可视觉区分的特征。
先决条件
- 已设置并连接的 OV20i 相机系统
- 带有您想检测特征的样品零件(例如带铅笔痕迹的纸张)
- 对 AI 训练概念的基本理解
- 可访问 Recipe Editor 和 Node-RED 功能
教程概览
我们将构建的内容: 一个能够检测纸张上铅笔痕迹并根据检测到的标记量判断通过/失败的分割模型。
所需时间: 45-60 分钟(含训练时间)
学习技能: AI 模型训练、分割标注、通过/失败逻辑配置
步骤 1:创建新的分割配方
1.1 新建配方
- 在 All Recipes 页面,点击右上角的 "+ New Recipe"
- 弹出“添加新配方”窗口
- 输入描述性的 Name(例如 "Pencil_Mark_Detection")
- 从配方类型下拉菜单中选择 "Segmentation"
- 点击 "OK" 创建新配方
为何选择分割? 与识别整个对象的分类不同,分割能找到并测量图像中的特定特征,非常适合缺陷检测、污染分析或覆盖面积测量。
1.2 激活配方
- 新配方将在 All Recipes 页面显示为 "Inactive"
- 在配方右侧选择 "Actions > Activate"
- 点击 "Activate" 确认
- 配方状态变为 "Active"
1.3 进入 Recipe Editor
- 点击活动配方旁的 "Edit"
- 点击 "Open Editor" 确认
- 进入带有分割配方的 Recipe Editor 界面
检查点: 您应看到带有分割配方名称的 Recipe Editor 界面面包屑菜单。
步骤 2:配置相机成像
2.1 访问成像设置
- 在 Recipe Editor 中,点击左下角的 "Configure Imaging"
- 打开成像配置页面,优化相机设置
2.2 优化对焦设置
- 将带有铅笔痕迹的样品纸放入相机视野
- 使用 Focus slider 调整至铅笔痕迹清晰对焦
- 可手动输入对焦值以提高精度
- 使用 Focus View(如有)查看边缘高亮和对焦评分
对焦提示:
- 对焦于缺陷出现的表面
- 确保铅笔痕迹清晰且轮廓分明
- 对焦评分越高,焦点质量越好
2.3 配置曝光设置
- 调整 Exposure 滑块以获得合适亮度
- 铅笔痕迹应清晰可见,纸张不过曝
- 可先使用自动设置,再根据需要微调
- 监控实时预览,观察调整效果
曝光指南:
- 铅笔痕迹与纸张应有良好对比
- 避免过曝导致细微痕迹消失
- 保持整个检测区域光照均匀
2.4 设置 LED 照明
- 选择适合应用的 LED Light Pattern
- 对铅笔痕迹检测,均匀照明通常效果最佳
- 调整 LED Light Intensity 以减少阴影和眩光
- 如有反光问题,可尝试不同光照模式
2.5 调整 Gamma 和对比度
- 微调 Gamma 以增强痕迹与背景的对比度
- 较高的 Gamma 可使细微铅笔痕迹更明显
- 较低的 Gamma 可减少干净区域的噪点
- 平衡 Gamma 以优化缺陷可见性和背景清晰度
2.6 保存成像设置
- 设置优化完成后,点击 "Save Imaging Settings"
- 相机配置将保存至该配方
- 实时预览应显示清晰且对比度良好的图像
检查点: 相机应生成清晰图像,铅笔痕迹与纸张背景易于区分。
步骤 3:配置模板和对齐
3.1 进入模板图像和对齐设置
- 点击面包屑菜单中的 Recipe Name 返回 Recipe Editor
- 从菜单中选择 "Template Image and Alignment"
3.2 本教程中跳过对齐器
- 由于我们要检测整张板材的特征,点击 “Skip Aligner”
- 这将禁用基于位置的对齐,使用整张图像
- 点击 “Save” 以应用更改
何时使用对齐器: 当需要检测可能移动或旋转的零件特定位置的特征时,启用对齐器。对于像铅笔痕迹这样的整张板材检测,通常适合跳过对齐器。
第 4 步:设置检测区域
4.1 进入检测设置
- 返回 Recipe Editor,选择 “Inspection Setup”
- 这里定义要分析的图像区域
4.2 配置感兴趣区域 (ROI)
- 你将看到相机视野的预览
- 拖动 ROI 框的角点 调整其大小和位置
- 对于铅笔痕迹检测,通常覆盖整个板材区域
- 确保 ROI 包含所有可能出现铅笔痕迹的区域
ROI 最佳实践:
- 包含所有可能出现缺陷的区域
- 排除边缘或背景等不应分析的区域
- ROI 应足够大以覆盖零件位置的变化
- 避免包含文字、标志或其他预期标记
4.3 保存 ROI 配置
- ROI 定位正确后,点击 “Save”
- 检测区域即为分割模型定义的范围
第 5 步:标注并训练模型
5.1 进入标注与训练
- 返回 Recipe Editor,选择 “Label and Train”
- 在这里教 AI 识别铅笔痕迹
5.2 配置检测类别
- 在 Inspection Types 下点击 “Edit”
- 将类别重命名为 “Pencil Mark”(或你的具体缺陷类型)
- 选择一个醒目的 颜色 用于显示检测到的痕迹
- 点击 “Save” 应用更改
5.3 捕获训练图像
- 拍摄至少 10 张 带有不同铅笔痕迹的板材图像
- 训练样本应多样化:
- 不同大小和形状的铅笔痕迹
- 浅色和深色痕迹
- 板材上的不同位置
- 不同密度的痕迹
训练图像建议:
- 包含明显和细微的痕迹
- 捕捉各种光照条件
- 每张图像中包含无痕迹的干净区域
- 确保图像代表实际生产环境
5.4 标注训练图像
- 对每张训练图像,使用 Brush tool 勾勒铅笔痕迹
- 仅标注铅笔痕迹,避免标注纸张或其他特征
- 标注要精确且全面
- 每张图像标注完成后点击 “Save Annotations”
标注最佳实践:
- 对“铅笔痕迹”的定义保持一致
- 标注完整的痕迹,而非部分
- 不标注预期的文字或标志
- 使用稳定且细致的笔触确保边界准确
5.5 审核标注
- 仔细检查所有标注图像 确保准确无误
- 查找遗漏或错误标注的区域
- 需要时重新标注
- 高质量标注提升模型性能
第 6 步:训练分割模型
6.1 开始训练流程
- 标注至少 10 张图像后,点击 “Return to Live”
- 点击 “Train Segmentation Model”
- 输入训练的 迭代次数
迭代次数指南:
- 初次训练建议 100-200 次迭代
- 更多迭代通常提高准确度,但耗时更长
- 监控训练进度并根据情况调整
- 在准确度和训练时间间取得平衡
6.2 监控训练进度
- 点击 “Start Training” 开始训练
- 训练进度弹窗显示:
- 当前迭代次数
- 训练准确率百分比
- 预计剩余时间
6.3 训练控制选项
训练过程中,你可以:
- Abort Training — 若需修改,停止训练
- Finish Training Early — 达到满意准确率时提前结束
- Monitor Progress — 观察准确率随迭代提升
训练建议:
- 训练达到目标准确率时会自动结束
- 更高准确率表示模型性能更好
- 若准确率停滞,可能需要更多训练数据
6.4 评估训练结果
- 训练完成后,查看最终准确率
- 点击 “Live Preview” 观察实时分割效果
- 使用新样本测试模型性能
成功指标:
- 铅笔痕迹以选定颜色高亮显示
- 干净区域未被误标
- 不同类型痕迹均能稳定检测
- 模型对新样本响应良好
第 7 步:配置合格/不合格逻辑
7.1 进入 IO Block
- 返回 Recipe Editor,选择 “IO Block”
- 确保所有 AI Block 显示为 “trained (green)” 后继续
- 点击 “Configure I/O” 进入 Node-RED 编辑器
7.2 设置 Node-RED 流程
- 删除现有的 Classification Block Logic 节点
- 从左侧调色板拖入:
- All Block Outputs 节点(如果尚未存在)
- Function 节点
- Final Pass/Fail 节点
- 连接节点:All Block Outputs → Function → Final Pass/Fail
7.3 配置通过/失败逻辑
双击 Function 节点,选择以下逻辑示例之一:
选项 1:无缺陷时通过
// 如果未检测到铅笔痕迹则通过
const allBlobs = msg.payload.segmentation.blobs;
const results = allBlobs.length < 1;
msg.payload = results;
return msg;
选项 2:所有痕迹均小于阈值时通过
// 如果所有痕迹均小于阈值则通过
const threshold = 500; // 像素
const allBlobs = msg.payload.segmentation.blobs;
const allUnderThreshold = allBlobs.every(blob => blob.pixel_count < threshold);
msg.payload = allUnderThreshold;
return msg;
选项 3:总覆盖面积较低时通过
// 如果总标记面积低于阈值则通过
const threshold = 5000; // 总像素数
const allBlobs = msg.payload.segmentation.blobs;
const totalArea = allBlobs.reduce((sum, blob) => sum + blob.pixel_count, 0);
msg.payload = totalArea < threshold;
return msg;
7.4 部署并测试逻辑
- 点击 “Done” 保存函数
- 点击 “Deploy” 激活逻辑
- 进入 HMI 测试您的通过/失败逻辑
测试您的逻辑:
- 使用干净的样品(应通过)
- 使用轻微标记的样品(根据您的标准通过/失败)
- 使用严重标记的样品(应失败)
- 验证结果是否符合预期
第 8 步:优化与验证
8.1 使用生产样品测试
- 运行多个测试样品进行检测
- 验证检测准确率是否满足要求
- 检查通过/失败逻辑是否正确工作
- 记录任何问题或特殊情况
8.2 微调模型性能
如果检测不稳定:
- 添加更多多样化的训练图像
- 提高标注质量和一致性
- 调整成像设置以增强对比度
- 进行更多迭代重新训练
如果需要调整通过/失败逻辑:
- 修改 Node-RED 函数中的阈值
- 测试不同的逻辑方案
- 考虑多重标准以应对复杂决策
- 结合生产需求进行验证
8.3 生产验证
- 在实际条件下使用真实生产零件进行测试
- 与质量团队确认标准符合要求
- 记录性能指标,如检测准确率和误报率
- 建立监控机制,跟踪性能变化
第 9 步:理解分割结果
9.1 分割数据结构
您的分割结果包含:
- Blobs:单个检测到的特征(铅笔痕迹)
- Pixel Count:每个特征的大小
- Location Data:特征所在位置
- Confidence Scores:模型对每个检测的置信度
9.2 使用分割数据
您可以基于以下内容创建复杂的通过/失败逻辑:
- 缺陷数量
- 单个缺陷大小(像素数)
- 缺陷总面积(所有像素数之和)
- 缺陷位置
- 缺陷形状特征(适用于高级应用)
成功!您的分割模型已完成
您的 OV20i 分割检测现已能够:
✅ 自动检测图像中的铅笔痕迹(或您的特定特征)
✅ 测量检测到特征的大小和数量
✅ 根据您的具体标准做出通过/失败判定
✅ 提供每个检测特征的详细信息
✅ 适应痕迹大小、形状和位置的变化
关键要点
分割 vs. 分类:
- 分割 用于定位并测量图像中的特定特征
- 分类 用于识别整体对象或整体状态
- 分割适用于缺陷检测、污染分析或覆盖率测量
训练最佳实践:
- 标注质量比数量更重要
- 训练集应包含多样化样本
- 使用生产样品进行充分测试
- 持续监控并根据需要重新训练
通过/失败逻辑:
- 从简单标准开始,逐步增加复杂度
- 使用边界样本和极端情况测试逻辑
- 记录标准以保证一致性
- 综合考虑多因素以实现稳健决策
后续步骤
完成首个分割模型后:
- 应用于其他用例 — 尝试检测不同类型的缺陷或特征
- 与生产系统集成 — 连接 PLC 或质量管理系统
- 建立数据采集 — 跟踪性能指标和检测统计
- 培训操作员 — 确保团队了解如何监控和维护系统
- 规划维护 — 安排定期模型更新和性能评估